home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / languages / obrn-a_1.5_lib.lha / oberon-a / source2.lha / source / amiga / Locale.mod < prev    next >
Encoding:
Text File  |  1995-01-26  |  13.7 KB  |  432 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: Locale.mod $
  4.   Description: Interface to locale.library
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.6 $
  8.       $Author: fjc $
  9.         $Date: 1995/01/26 02:39:55 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1991-1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A Interface Copyright © 1994-1995, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20. *************************************************************************)
  21.  
  22. <* STANDARD- *> <* INITIALISE- *> <* MAIN- *>
  23. <*$ CaseChk-  IndexChk- LongVars+ NilChk-  *>
  24. <*$ RangeChk- StackChk- TypeChk-  OvflChk- *>
  25.  
  26. MODULE [2] Locale;
  27.  
  28. IMPORT
  29.   SYS := SYSTEM, Kernel, e := Exec, u := Utility, d := Dos, s := Sets;
  30.  
  31. (*
  32. **      $VER: locale.h 38.12 (24.2.93)
  33. **
  34. **      locale.library interface structures and definitions
  35. *)
  36.  
  37. (*****************************************************************************)
  38.  
  39. CONST
  40.  
  41. (* constants for GetLocaleStr() *)
  42.   day1 * = 1;           (* Sunday    *)
  43.   day2 * = 2;           (* Monday    *)
  44.   day3 * = 3;           (* Tuesday   *)
  45.   day4 * = 4;           (* Wednesday *)
  46.   day5 * = 5;           (* Thursday  *)
  47.   day6 * = 6;           (* Friday    *)
  48.   day7 * = 7;           (* Saturday  *)
  49.  
  50.   abday1 * = 8;         (* Sun *)
  51.   abday2 * = 9;         (* Mon *)
  52.   abday3 * = 10;        (* Tue *)
  53.   abday4 * = 11;        (* Wed *)
  54.   abday5 * = 12;        (* Thu *)
  55.   abday6 * = 13;        (* Fri *)
  56.   abday7 * = 14;        (* Sat *)
  57.  
  58.   mon1 * = 15;          (* January   *)
  59.   mon2 * = 16;          (* February  *)
  60.   mon3 * = 17;          (* March     *)
  61.   mon4 * = 18;          (* April     *)
  62.   mon5 * = 19;          (* May       *)
  63.   mon6 * = 20;          (* June      *)
  64.   mon7 * = 21;          (* July      *)
  65.   mon8 * = 22;          (* August    *)
  66.   mon9 * = 23;          (* September *)
  67.   mon10 * = 24;         (* October   *)
  68.   mon11 * = 25;         (* November  *)
  69.   mon12 * = 26;         (* December  *)
  70.  
  71.   abmon1 * = 27;        (* Jan *)
  72.   abmon2 * = 28;        (* Feb *)
  73.   abmon3 * = 29;        (* Mar *)
  74.   abmon4 * = 30;        (* Apr *)
  75.   abmon5 * = 31;        (* May *)
  76.   abmon6 * = 32;        (* Jun *)
  77.   abmon7 * = 33;        (* Jul *)
  78.   abmon8 * = 34;        (* Aug *)
  79.   abmon9 * = 35;        (* Sep *)
  80.   abmon10 * = 36;       (* Oct *)
  81.   abmon11 * = 37;       (* Nov *)
  82.   abmon12 * = 38;       (* Dec *)
  83.  
  84.   yesStr * = 39;        (* affirmative response for yes/no queries *)
  85.   noStr * = 40;         (* negative response for yes/no queries    *)
  86.  
  87.   amStr * = 41;         (* AM *)
  88.   pmStr * = 42;         (* PM *)
  89.  
  90.   softHyphen * = 43;    (* soft hyphenation *)
  91.   hardHyphen * = 44;    (* hard hyphenation *)
  92.  
  93.   openQuote * = 45;     (* start of quoted block *)
  94.   closeQuote * = 46;    (* end of quoted block   *)
  95.  
  96.   yesterdaystr * = 47;  (* Yesterday *)
  97.   todaystr * = 48;      (* Today     *)
  98.   tomorrowstr * = 49;   (* Tomorrow  *)
  99.   futurestr * = 50;     (* Future    *)
  100.  
  101.   maxStrMsg * = 51;     (* current number of defined strings *)
  102.  
  103.  
  104. (*****************************************************************************)
  105.  
  106. TYPE
  107.  
  108. (* OpenLibrary("locale.library",0) returns a pointer to this structure *)
  109.   LocaleBasePtr* = POINTER TO LocaleBase;
  110.   LocaleBase * = RECORD (e.LibraryBase)
  111.     libNode *    : e.Library;
  112.     sysPatches - : BOOLEAN;     (* TRUE if locale installed its patches *)
  113.   END;
  114.  
  115.  
  116. (*****************************************************************************)
  117.  
  118. TYPE
  119.  
  120. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  121.  
  122.   LocalePtr * = POINTER TO Locale;
  123.   Locale * = RECORD
  124.     localeName -       : e.LSTRPTR;   (* locale's name               *)
  125.     languageName -     : e.LSTRPTR;   (* language of this locale     *)
  126.     prefLanguages -    : ARRAY 10 OF e.LSTRPTR; (* preferred languages*)
  127.     flags -            : s.SET32;     (* always 0 for now            *)
  128.  
  129.     codeSet -          : e.ULONG;     (* always 0 for now            *)
  130.     countryCode -      : e.ULONG;     (* user's country code         *)
  131.     telephoneCode -    : e.ULONG;     (* country's telephone code    *)
  132.     gmtOffset -        : LONGINT;     (* minutes from GMT            *)
  133.     measuringSystem -  : SHORTINT;    (* what measuring system?      *)
  134.     calendarType -     : SHORTINT;    (* what calendar type?         *)
  135.     reserved0 -        : ARRAY 2 OF SHORTINT;
  136.  
  137.     dateTimeFormat -   : e.LSTRPTR;    (* regular date & time format  *)
  138.     dateFormat -       : e.LSTRPTR;    (* date format by itself       *)
  139.     timeFormat -       : e.LSTRPTR;    (* time format by itself       *)
  140.  
  141.     shortDateTimeFormat - : e.LSTRPTR; (* short date & time format    *)
  142.     shortDateFormat -  : e.LSTRPTR;    (* short date format by itself *)
  143.     shortTimeFormat -  : e.LSTRPTR;    (* short time format by itself *)
  144.  
  145.     (* for numeric values *)
  146.     decimalPoint -     : e.LSTRPTR;    (* character before the decimals *)
  147.     groupSeparator -   : e.LSTRPTR;    (* separates groups of digits    *)
  148.     fracGroupSeparator - : e.LSTRPTR;  (* separates groups of digits    *)
  149.     grouping -         : e.ADDRESS;    (* size of each group            *)
  150.     fracGrouping -     : e.ADDRESS;    (* size of each group            *)
  151.  
  152.     (* for monetary values *)
  153.     monDecimalPoint -  : e.LSTRPTR;
  154.     monGroupSeparator - : e.LSTRPTR;
  155.     monFracGroupSeparator - : e.LSTRPTR;
  156.     monGrouping -      : e.ADDRESS;
  157.     monFracGrouping -  : e.ADDRESS;
  158.     monFracDigits -    : SHORTINT;     (* digits after the decimal point   *)
  159.     monIntFracDigits - : SHORTINT;     (* for international representation *)
  160.     reserved1 -        : ARRAY 2 OF SHORTINT;
  161.  
  162.     (* for currency symbols *)
  163.     monCS -            : e.LSTRPTR;    (* currency symbol              *)
  164.     monSmallCS -       : e.LSTRPTR;    (* symbol for small amounts     *)
  165.     monIntCS -         : e.LSTRPTR;    (* internationl (ISO 4217) code *)
  166.  
  167.     (* for positive monetary values *)
  168.     monPositiveSign -  : e.LSTRPTR;    (* indicate positive money value   *)
  169.     monPositiveSpaceSep - : SHORTINT;  (* determine if separated by space *)
  170.     monPositiveSignPos - : SHORTINT;   (* position of positive sign       *)
  171.     monPositiveCSPos - : SHORTINT;     (* position of currency symbol     *)
  172.     reserved2 -        : SHORTINT;
  173.  
  174.     (* for negative monetary values *)
  175.     monNegativeSign -  : e.LSTRPTR;    (* indicate negative money value   *)
  176.     monNegativeSpaceSep - : SHORTINT;  (* determine if separated by space *)
  177.     monNegativeSignPos - : SHORTINT;   (* position of negative sign       *)
  178.     monNegativeCSPos - : SHORTINT;     (* position of currency symbol     *)
  179.     reserved3 -        : SHORTINT;
  180.   END;
  181.  
  182. CONST
  183.  
  184. (* constants for Locale.loc_MeasuringSystem *)
  185.   iso *      = 0;             (* international metric system *)
  186.   american * = 1;             (* american system             *)
  187.   imperial * = 2;             (* imperial system             *)
  188.   british *  = 3;             (* british system              *)
  189.  
  190. (* constants for Locale.loc_CalendarType *)
  191.   ct7sun * = 0;      (* 7 days a week, Sunday is the first day    *)
  192.   ct7mon * = 1;      (* 7 days a week, Monday is the first day    *)
  193.   ct7tue * = 2;      (* 7 days a week, Tuesday is the first day   *)
  194.   ct7wed * = 3;      (* 7 days a week, Wednesday is the first day *)
  195.   ct7thu * = 4;      (* 7 days a week, Thursday is the first day  *)
  196.   ct7fri * = 5;      (* 7 days a week, Friday is the first day    *)
  197.   ct7sat * = 6;      (* 7 days a week, Saturday is the first day  *)
  198.  
  199. (* constants for Locale.loc_MonPositiveSpaceSep and Locale.loc_MonNegativeSpaceSep *)
  200.   nospace * = 0; (* cur. symbol is NOT separated from value with a space *)
  201.   space *   = 1; (* cur. symbol IS separated from value with a space     *)
  202.  
  203. (* constants for Locale.loc_MonPositiveSignPos and Locale.loc_MonNegativeSignPos *)
  204.   parens *   = 0;     (* () surround the quantity and currency_symbol   *)
  205.   precAll *  = 1;     (* sign string comes before amount and symbol     *)
  206.   succAll *  = 2;     (* sign string comes after amount and symbol      *)
  207.   precCurr * = 3;     (* sign string comes right before currency symbol *)
  208.   succCurr * = 4;     (* sign string comes right after currency symbol  *)
  209.  
  210. (* constants for Locale.loc_MonPositiveCSPos and Locale.loc_MonNegativeCSPos *)
  211.   precedes * = 0;    (* currency symbol comes before value *)
  212.   succeeds * = 1;    (* currency symbol comes after value  *)
  213.  
  214. (* elements of the byte arrays pointed to by:
  215.  *   Locale.loc_Grouping
  216.  *   Locale.loc_FracGrouping
  217.  *   Locale.loc_MonGrouping
  218.  *   Locale.loc_MonFracGrouping
  219.  * are interpreted as follows:
  220.  *
  221.  *    255     indicates that no further grouping is to be performed
  222.  *    0       indicates that the previous element is to be repeatedly used
  223.  *            for the remainder of the digits
  224.  *    <other> the number of digits that comprises the current group
  225.  *)
  226.  
  227.  
  228. (*****************************************************************************)
  229.  
  230. CONST
  231.  
  232. (* Tags for OpenCatalog() *)
  233.   tagBase *         = u.user + 090000H;
  234.   builtInLanguage * = tagBase+1; (* language of built-in strings    *)
  235.   builtInCodeSet *  = tagBase+2; (* code set of built-in strings    *)
  236.   version *         = tagBase+3; (* catalog version number required *)
  237.   language *        = tagBase+4; (* preferred language of catalog   *)
  238.  
  239.  
  240. (*****************************************************************************)
  241.  
  242. CONST
  243.  
  244. (* Comparison types for StrnCmp() *)
  245.   ascii * = 0;
  246.   collate1 * = 1;
  247.   collate2 * = 2;
  248.  
  249.  
  250. (*****************************************************************************)
  251.  
  252. TYPE
  253.  
  254. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  255.   CatalogPtr * = POINTER TO Catalog;
  256.   Catalog * = RECORD (e.NodeBase)
  257.     link -     : e.Node;      (* for internal linkage    *)
  258.     pad -      : e.UWORD;     (* to longword align       *)
  259.     language - : e.LSTRPTR;    (* language of the catalog *)
  260.     codeSet -  : e.ULONG;     (* currently always 0      *)
  261.     version -  : e.UWORD;     (* version of the catalog  *)
  262.     revision - : e.UWORD;     (* revision of the catalog *)
  263.   END;
  264.  
  265.  
  266. (*-- Library Base variable --------------------------------------------*)
  267.  
  268. CONST
  269.  
  270.   localeName * = "locale.library";
  271.  
  272. VAR
  273.  
  274.   base* : LocaleBasePtr;
  275.  
  276.  
  277. (*-- Library Functions ------------------------------------------------*)
  278.  
  279. (*
  280. **      $VER: locale_protos.h 38.5 (18.6.93)
  281. *)
  282.  
  283. (*--- functions in V38 or higher (Release 2.1) ---*)
  284. PROCEDURE CloseCatalog* [base,-36]
  285.   ( catalog [8] : CatalogPtr );
  286.  
  287. PROCEDURE CloseLocale* [base,-42]
  288.   ( locale [8] : LocalePtr );
  289.  
  290. PROCEDURE ConvToLower* [base,-48]
  291.   ( locale    [8] : LocalePtr;
  292.     character [0] : CHAR )
  293.   : CHAR;
  294.  
  295. PROCEDURE ConvToUpper* [base,-54]
  296.   ( locale    [8] : LocalePtr;
  297.     character [0] : CHAR )
  298.   : CHAR;
  299.  
  300. PROCEDURE FormatDate* [base,-60]
  301.   ( locale       [8] : LocalePtr;
  302.     fmtTemplate  [9] : ARRAY OF CHAR;
  303.     VAR date    [10] : d.DateBase;
  304.     putCharFunc [11] : u.HookBasePtr );
  305.  
  306. PROCEDURE FormatString* [base,-66]
  307.   ( locale       [8] : LocalePtr;
  308.     fmtTemplate  [9] : ARRAY OF CHAR;
  309.     dataStream  [10] : e.APTR;
  310.     putCharFunc [11] : u.HookBasePtr )
  311.   : e.APTR;
  312.  
  313. PROCEDURE GetCatalogStr* [base,-72]
  314.   ( catalog       [8] : CatalogPtr;
  315.     stringNum     [0] : LONGINT;
  316.     defaultString [9] : ARRAY OF CHAR )
  317.   : e.LSTRPTR;
  318.  
  319. PROCEDURE GetLocaleStr* [base,-78]
  320.   ( locale    [8] : LocalePtr;
  321.     stringNum [0] : e.ULONG )
  322.   : e.LSTRPTR;
  323.  
  324. PROCEDURE IsAlNum* [base,-84]
  325.   ( locale    [8] : LocalePtr;
  326.     character [0] : CHAR )
  327.   : BOOLEAN;
  328.  
  329. PROCEDURE IsAlpha* [base,-90]
  330.   ( locale    [8] : LocalePtr;
  331.     character [0] : CHAR )
  332.   : BOOLEAN;
  333.  
  334. PROCEDURE IsCntrl* [base,-96]
  335.   ( locale    [8] : LocalePtr;
  336.     character [0] : CHAR )
  337.   : BOOLEAN;
  338.  
  339. PROCEDURE IsDigit* [base,-102]
  340.   ( locale    [8] : LocalePtr;
  341.     character [0] : CHAR )
  342.   : BOOLEAN;
  343.  
  344. PROCEDURE IsGraph* [base,-108]
  345.   ( locale    [8] : LocalePtr;
  346.     character [0] : CHAR )
  347.   : BOOLEAN;
  348.  
  349. PROCEDURE IsLower* [base,-114]
  350.   ( locale    [8] : LocalePtr;
  351.     character [0] : CHAR )
  352.   : BOOLEAN;
  353.  
  354. PROCEDURE IsPrint* [base,-120]
  355.   ( locale    [8] : LocalePtr;
  356.     character [0] : CHAR )
  357.   : BOOLEAN;
  358.  
  359. PROCEDURE IsPunct* [base,-126]
  360.   ( locale    [8] : LocalePtr;
  361.     character [0] : CHAR )
  362.   : BOOLEAN;
  363.  
  364. PROCEDURE IsSpace* [base,-132]
  365.   ( locale    [8] : LocalePtr;
  366.     character [0] : CHAR )
  367.   : BOOLEAN;
  368.  
  369. PROCEDURE IsUpper* [base,-138]
  370.   ( locale    [8] : LocalePtr;
  371.     character [0] : CHAR )
  372.   : BOOLEAN;
  373.  
  374. PROCEDURE IsXDigit* [base,-144]
  375.   ( locale    [8] : LocalePtr;
  376.     character [0] : CHAR )
  377.   : BOOLEAN;
  378.  
  379. PROCEDURE OpenCatalogA* [base,-150]
  380.   ( locale [8] : LocalePtr;
  381.     name   [9] : ARRAY OF CHAR;
  382.     tags  [10] : ARRAY OF u.TagItem )
  383.   : CatalogPtr;
  384.  
  385. PROCEDURE OpenCatalog* [base,-150]
  386.   ( locale [8]  : LocalePtr;
  387.     name   [9]  : ARRAY OF CHAR;
  388.     tags  [10]..: u.Tag )
  389.   : CatalogPtr;
  390.  
  391. PROCEDURE OpenLocale* [base,-156]
  392.   ( name [8] : ARRAY OF CHAR )
  393.   : LocalePtr;
  394.  
  395. PROCEDURE ParseDate* [base,-162]
  396.   ( locale       [8] : LocalePtr;
  397.     VAR date     [9] : d.DateBase;
  398.     fmtTemplate [10] : ARRAY OF CHAR;
  399.     getCharFunc [11] : u.HookBasePtr )
  400.   : BOOLEAN;
  401.  
  402. PROCEDURE StrConvert* [base,-174]
  403.   ( locale      [8] : LocalePtr;
  404.     string      [9] : ARRAY OF CHAR;
  405.     VAR buffer [10] : ARRAY OF CHAR;
  406.     bufferSize  [0] : e.ULONG;
  407.     type        [1] : e.ULONG )
  408.   : e.ULONG;
  409.  
  410. PROCEDURE StrnCmp* [base,-180]
  411.   ( locale   [8] : LocalePtr;
  412.     string1  [9] : ARRAY OF CHAR;
  413.     string2 [10] : ARRAY OF CHAR;
  414.     length   [0] : LONGINT;
  415.     type     [1] : e.ULONG )
  416.   : LONGINT;
  417.  
  418. (*-- Library Base variable --------------------------------------------*)
  419.  
  420. (*-----------------------------------*)
  421. PROCEDURE* [0] CloseLib (VAR rc : LONGINT);
  422.  
  423. BEGIN (* CloseLib *)
  424.   IF base # NIL THEN e.CloseLibrary (base) END
  425. END CloseLib;
  426.  
  427. BEGIN
  428.   base := SYS.VAL ( LocaleBasePtr,
  429.                     e.OpenLibrary (localeName, e.libraryMinimum));
  430.   IF base # NIL THEN Kernel.SetCleanup (CloseLib) END
  431. END Locale.
  432.